class Solution {
public:
    int longestConsecutive(vector<int>& nums) {

        // 下面这种是参考B站up主的
        /*
        unordered_set<int> s;
        set<int> s;         // unordered_set 和 set 都可以
        for(auto e : nums)
            s.insert(e);

        // 用力扣的测试用例解释一下         -- [100,4,200,1,3,2]
        // set将来遍历的顺序就是有序的      -- [1, 2, 3, 4, 100, 200]
        // 像1，他的左边没有值，就是起点    -- 对应下面s.find(e - 1) == s.end()
        // 像4，他的右边没有值，就是终点    -- 对应下面s.find(++e) != s.end()
        */
        unordered_set<int> s;
        int ans = 0;
        for(const auto& e : nums)
            s.insert(e);
        for(auto e : s)
        {
            if(s.find(e - 1) == s.end())                // 起点
            {
                int len = 1;                            // 如果进来了，那就是起点，所以本身起点算一个
                while(s.find(++e) != s.end()) len++;
                ans = max(len, ans);
            }
        }
        return ans;


        // set<int> s;
        // int ans = 0;
        // for(const auto& e : nums)
        //     s.insert(e);
        // set<int>::iterator it = s.begin();
        // while(it != s.end())
        // {
        //     int tmp = 1;
        //     if(s.find(*it - 1) == s.end())
        //     {
        //         while(s.find(*it + 1) != s.end())
        //         {
        //             tmp++;
        //             it++;
        //         }
        //     }
        //     ans  = max(ans, tmp);
        //     it++;
        // }
        // return ans;
    }
};